Criterion B Details

# Default ecosystem code for template development.
# This line is replaced by build_ecosystem_pages.py for each ecosystem.
ecosystem_code = 'Agroecosistema Papero'

Import Python modules.

import os
import yaml
from pathlib import Path
from lonboard import Map
from rle.core import Ecosystems, criterion_b_status, rle_category
from rle.core.eoo import make_eoo
from rle.core.aoo import make_aoo_grid

Load the country config file.

project_root = os.environ.get('PIXI_PROJECT_ROOT', str(Path('..').resolve()))
config_path = Path(project_root) / 'config' / 'country_config.yaml'
with open(config_path) as f:
    config = yaml.safe_load(f)

# Ecosystem index (the COG pixel value for this ecosystem), looked up by code
# from the canonical index table. Absent if the index has not been built yet.
import csv
ecosystem_index = None
index_csv = Path(project_root) / 'config' / 'ecosystems' / 'index.csv'
if index_csv.exists():
    with open(index_csv) as f:
        for row in csv.DictReader(f):
            if row['code'] == ecosystem_code:
                ecosystem_index = int(row['index'])
                break

Load & Filter Ecosystem Data

Load data for all the ecosystems.

import sys
# Shared config helpers live in scripts/; make them importable from here.
sys.path.insert(0, str(Path(project_root) / 'scripts'))
from _config import ensure_vector_source

source = config['ecosystem_source']
# ecosystem_code_column is optional: fall back to the name column.
ecosystem_column = source.get('ecosystem_code_column') or source.get('ecosystem_name_column')
# Prefer the ecosystem-sorted `optimized_data` copy when configured, so that
# filtering to one ecosystem uses parquet predicate pushdown instead of loading
# the whole national map into memory. Falls back to `data`.
ecosystems = Ecosystems.from_file(
    ensure_vector_source(source.get('optimized_data') or source['data']),
    ecosystem_column=ecosystem_column,
    ecosystem_name_column=source.get('ecosystem_name_column'),
    functional_group_column=source.get('functional_group_column')
)

Filter by the Agroecosistema Papero and check the number of features.

ecosystem = ecosystems.filter(ecosystem_code)
has_data = ecosystem.size() > 0
print(f'{ecosystem.size() = }')
if not has_data:
    from IPython.display import Markdown, display
    display(Markdown(
        f'**No spatial data found for {ecosystem_code}.** '
        f'Criterion B calculations are skipped.'
    ))
ecosystem.size() = 129

Extent of Occurrence (EOO) (subcriterion B1)

Extent of occurrence (EOO). The EOO of an ecosystem is the area (km2) of a minimum convex polygon – the smallest polygon in which no internal angle exceeds 180° that encompasses all known current spatial occurrences of the ecosystem type.

The minimum convex polygon (also known as a convex hull) must not exclude any areas, discontinuities or disjunctions, regardless of whether the ecosystem can occur in those areas or not. Regions such as oceans (for terrestrial ecosystems), land (for coastal or marine ecosystems), or areas outside the study area (such as in a different country) must remain included within the minimum convex polygon to ensure that this standardised method is comparable across ecosystem types. In addition, these features contribute to spreading risks across the distribution of the ecosystem by making different parts of its distribution more spatially independent.

Calculate EOO

Start by calculating the convex hull of the ecosystem’s distribution.

import geopandas as gpd

if has_data:
    ecosystem_geometry = ecosystem.geometry.union_all()
    gdf_ecosystem_polygons = gpd.GeoDataFrame(geometry=[ecosystem_geometry], crs=ecosystem.geometry.crs)
    hull = ecosystem_geometry.convex_hull
    gdf_hull = gpd.GeoDataFrame(geometry=[hull], crs=ecosystem.geometry.crs)

Display the ecosystem’s distribution and the convex hull.

from lonboard import Map, PolygonLayer
from rle.core.viz import smart_map

if has_data:
    eoo_hull = make_eoo(ecosystem).compute()
    display(smart_map([eoo_hull, ecosystem]))
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(
if has_data:
    hull_ea = gdf_hull.to_crs("ESRI:54034")
    eoo = hull_ea.geometry.iloc[0].area / 1e6
    print(f'EOO is {eoo:.1f} km2')
EOO is 42402.3 km2

Then calculate the area of the convex hull polygon.

Direct calculation of EOO

EOO can also be calculated directly using …

if has_data:
    ecosystem.eoo

Verify that the area returned by calling make_eoo(ecosystem).compute().area_km2 is the same as the area of the convex hull polygon.

if has_data:
    assert ecosystem.eoo == eoo

Area of Occupancy (AOO) (subcriterion B2)

The protocol for this adjustment includes the following steps:

  1. Intersect AOO grid with the ecosystem’s distribution map.
  2. Calculate extent of the ecosystem type in each grid cell (area) and sum these areas to obtain the total ecosystem area (total area).
  3. Arrange grid cells in ascending order based on their area (smaller first). Calculate accumulated sum of area per cell (cumulative area).
  4. Calculate cumulative proportion by dividing cumulative area by total area (cumulative proportion takes values between 0 and 1)
  5. Calculate AOO by counting the number of cells with a cumulative proportion greater than 0.01 (i.e. exclude cells that in combination account for up to 1% of the total mapped extent of the ecosystem type).

AOO Calculation Details

Intersect AOO grid and ecosystem map

  1. Intersect AOO grid with the ecosystem’s distribution map
from pathlib import Path
from rle.core.aoo import make_aoo_grid_cached

if has_data:
    # Prefer a prebuilt grid cache (e.g. a gs:// URI) so the national AOO grid
    # is not recomputed during CI renders — computing it from the full national
    # ecosystem map peaks at many GB of RAM. Fall back to a local cache when no
    # prebuilt cache is configured. Build one with `pixi run build-caches`.
    cache_path = (
        source.get('aoo_grid_cache_url')
        or (Path(project_root) / '.cache' / 'aoo_grid.parquet')
    )
    aoo_grid = make_aoo_grid_cached(ecosystems, cache_path=cache_path)
    aoo_grid_filtered = aoo_grid.filter_by_ecosystem(ecosystem_code)

Visualize variations in the AOO grid.

from matplotlib.colors import LinearSegmentedColormap
from lonboard.colormap import apply_continuous_cmap
from rle.core.aoo import slugify_ecosystem_name

ecosystem_column = slugify_ecosystem_name(ecosystem_code)
if has_data:
    cmap = LinearSegmentedColormap.from_list("white_red", ["white", "red"])
    values = aoo_grid_filtered.grid_cells[ecosystem_column].values
    normalized = (values - values.min()) / (values.max() - values.min())
    colors = apply_continuous_cmap(normalized, cmap)
    display(smart_map([(aoo_grid_filtered, {"get_fill_color": colors}), ecosystem]))
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(

Calculate grid cell area and total area

  1. Calculate extent of the ecosystem type in each grid cell (area) and sum these areas to obtain the total ecosystem area (total area).
if has_data:
    keep = ['geometry', 'grid_col', 'grid_row', ecosystem_column]
    gdf = aoo_grid_filtered.grid_cells[keep]
    display(gdf)
geometry grid_col grid_row Agroecosistema_Papero
0 POLYGON ((-77.70427 0.99486, -77.70427 1.08531... -866 11 0.026580
1 POLYGON ((-77.61444 0.72351, -77.61444 0.81396... -865 8 0.010646
2 POLYGON ((-77.61444 0.81396, -77.61444 0.90441... -865 9 0.026314
3 POLYGON ((-77.61444 0.99486, -77.61444 1.08531... -865 11 0.055049
4 POLYGON ((-77.61444 1.08531, -77.61444 1.17576... -865 12 0.007856
5 POLYGON ((-77.52461 0.81396, -77.52461 0.90441... -864 9 0.001172
6 POLYGON ((-77.52461 0.99486, -77.52461 1.08531... -864 11 0.038173
7 POLYGON ((-77.43478 0.81396, -77.43478 0.90441... -863 9 0.015783
8 POLYGON ((-77.43478 0.90441, -77.43478 0.99486... -863 10 0.014637
9 POLYGON ((-77.34495 1.08531, -77.34495 1.17576... -862 12 0.010996
10 POLYGON ((-74.29067 4.43572, -74.29067 4.52643... -828 49 0.014283
11 POLYGON ((-74.29067 4.70788, -74.29067 4.79862... -828 52 0.036830
12 POLYGON ((-74.29067 4.79862, -74.29067 4.88937... -828 53 0.041434
13 POLYGON ((-74.20084 4.70788, -74.20084 4.79862... -827 52 0.079973
14 POLYGON ((-74.20084 4.79862, -74.20084 4.88937... -827 53 0.106018
15 POLYGON ((-74.20084 4.88937, -74.20084 4.98013... -827 54 0.014226
16 POLYGON ((-74.11101 4.70788, -74.11101 4.79862... -826 52 0.036026
17 POLYGON ((-74.11101 4.79862, -74.11101 4.88937... -826 53 0.077521
18 POLYGON ((-74.11101 4.88937, -74.11101 4.98013... -826 54 0.075013
19 POLYGON ((-74.02118 4.25434, -74.02118 4.34503... -825 47 0.005741
20 POLYGON ((-74.02118 4.34503, -74.02118 4.43572... -825 48 0.030949
21 POLYGON ((-74.02118 4.79862, -74.02118 4.88937... -825 53 0.032679
22 POLYGON ((-74.02118 4.88937, -74.02118 4.98013... -825 54 0.003224
23 POLYGON ((-74.02118 4.98013, -74.02118 5.07091... -825 55 0.026987
24 POLYGON ((-74.02118 5.07091, -74.02118 5.1617,... -825 56 0.016361
25 POLYGON ((-74.02118 5.1617, -74.02118 5.2525, ... -825 57 0.035198
26 POLYGON ((-73.93135 4.34503, -73.93135 4.43572... -824 48 0.005038
27 POLYGON ((-73.93135 4.61715, -73.93135 4.70788... -824 51 0.002898
28 POLYGON ((-73.93135 4.70788, -73.93135 4.79862... -824 52 0.002568
29 POLYGON ((-73.93135 5.07091, -73.93135 5.1617,... -824 56 0.023284
30 POLYGON ((-73.93135 5.1617, -73.93135 5.2525, ... -824 57 0.009842
31 POLYGON ((-73.93135 5.2525, -73.93135 5.34332,... -824 58 0.003431
32 POLYGON ((-73.84152 4.70788, -73.84152 4.79862... -823 52 0.014499
33 POLYGON ((-73.84152 4.79862, -73.84152 4.88937... -823 53 0.011223
34 POLYGON ((-73.84152 4.88937, -73.84152 4.98013... -823 54 0.002537
35 POLYGON ((-73.84152 4.98013, -73.84152 5.07091... -823 55 0.002376
36 POLYGON ((-73.84152 5.07091, -73.84152 5.1617,... -823 56 0.017428
37 POLYGON ((-73.84152 5.1617, -73.84152 5.2525, ... -823 57 0.007356
38 POLYGON ((-73.84152 5.2525, -73.84152 5.34332,... -823 58 0.030071
39 POLYGON ((-73.84152 5.52498, -73.84152 5.61584... -823 61 0.007724
40 POLYGON ((-73.84152 5.61584, -73.84152 5.70671... -823 62 0.001124
41 POLYGON ((-73.75168 4.79862, -73.75168 4.88937... -822 53 0.005215
42 POLYGON ((-73.75168 4.88937, -73.75168 4.98013... -822 54 0.005060
43 POLYGON ((-73.75168 4.98013, -73.75168 5.07091... -822 55 0.016034
44 POLYGON ((-73.75168 5.07091, -73.75168 5.1617,... -822 56 0.011231
45 POLYGON ((-73.66185 4.98013, -73.66185 5.07091... -821 55 0.010959
46 POLYGON ((-73.66185 5.07091, -73.66185 5.1617,... -821 56 0.008674
47 POLYGON ((-73.66185 5.61584, -73.66185 5.70671... -821 62 0.052229
48 POLYGON ((-73.66185 5.70671, -73.66185 5.79759... -821 63 0.046215
49 POLYGON ((-73.57202 4.98013, -73.57202 5.07091... -820 55 0.002610
50 POLYGON ((-73.57202 5.07091, -73.57202 5.1617,... -820 56 0.002322
51 POLYGON ((-73.57202 5.1617, -73.57202 5.2525, ... -820 57 0.018008
52 POLYGON ((-73.57202 5.2525, -73.57202 5.34332,... -820 58 0.003649
53 POLYGON ((-73.39236 5.1617, -73.39236 5.2525, ... -818 57 0.007142
54 POLYGON ((-73.39236 5.43414, -73.39236 5.52498... -818 60 0.002852
55 POLYGON ((-73.30253 5.2525, -73.30253 5.34332,... -817 58 0.024365

The column Agroecosistema_Papero contains the (fractional) area of the ecosystem in each grid cell.

Sum up the areas of each grid cell to get the total area.

if has_data:
    total_area = gdf[ecosystem_column].sum()
    display(total_area)
np.float64(1.197629193678154)

Calculate cumulative area

  1. Arrange grid cells in ascending order based on their area (smaller first). Calculate accumulated sum of area per cell (cumulative area).
if has_data:
    gdf = gdf.sort_values(by=ecosystem_column)
    gdf["cumulative_area"] = gdf[ecosystem_column].cumsum()
    display(gdf)
geometry grid_col grid_row Agroecosistema_Papero cumulative_area
40 POLYGON ((-73.84152 5.61584, -73.84152 5.70671... -823 62 0.001124 0.001124
5 POLYGON ((-77.52461 0.81396, -77.52461 0.90441... -864 9 0.001172 0.002296
50 POLYGON ((-73.57202 5.07091, -73.57202 5.1617,... -820 56 0.002322 0.004618
35 POLYGON ((-73.84152 4.98013, -73.84152 5.07091... -823 55 0.002376 0.006994
34 POLYGON ((-73.84152 4.88937, -73.84152 4.98013... -823 54 0.002537 0.009531
28 POLYGON ((-73.93135 4.70788, -73.93135 4.79862... -824 52 0.002568 0.012098
49 POLYGON ((-73.57202 4.98013, -73.57202 5.07091... -820 55 0.002610 0.014708
54 POLYGON ((-73.39236 5.43414, -73.39236 5.52498... -818 60 0.002852 0.017561
27 POLYGON ((-73.93135 4.61715, -73.93135 4.70788... -824 51 0.002898 0.020458
22 POLYGON ((-74.02118 4.88937, -74.02118 4.98013... -825 54 0.003224 0.023682
31 POLYGON ((-73.93135 5.2525, -73.93135 5.34332,... -824 58 0.003431 0.027113
52 POLYGON ((-73.57202 5.2525, -73.57202 5.34332,... -820 58 0.003649 0.030762
26 POLYGON ((-73.93135 4.34503, -73.93135 4.43572... -824 48 0.005038 0.035800
42 POLYGON ((-73.75168 4.88937, -73.75168 4.98013... -822 54 0.005060 0.040861
41 POLYGON ((-73.75168 4.79862, -73.75168 4.88937... -822 53 0.005215 0.046075
19 POLYGON ((-74.02118 4.25434, -74.02118 4.34503... -825 47 0.005741 0.051817
53 POLYGON ((-73.39236 5.1617, -73.39236 5.2525, ... -818 57 0.007142 0.058959
37 POLYGON ((-73.84152 5.1617, -73.84152 5.2525, ... -823 57 0.007356 0.066315
39 POLYGON ((-73.84152 5.52498, -73.84152 5.61584... -823 61 0.007724 0.074040
4 POLYGON ((-77.61444 1.08531, -77.61444 1.17576... -865 12 0.007856 0.081895
46 POLYGON ((-73.66185 5.07091, -73.66185 5.1617,... -821 56 0.008674 0.090569
30 POLYGON ((-73.93135 5.1617, -73.93135 5.2525, ... -824 57 0.009842 0.100411
1 POLYGON ((-77.61444 0.72351, -77.61444 0.81396... -865 8 0.010646 0.111057
45 POLYGON ((-73.66185 4.98013, -73.66185 5.07091... -821 55 0.010959 0.122016
9 POLYGON ((-77.34495 1.08531, -77.34495 1.17576... -862 12 0.010996 0.133012
33 POLYGON ((-73.84152 4.79862, -73.84152 4.88937... -823 53 0.011223 0.144235
44 POLYGON ((-73.75168 5.07091, -73.75168 5.1617,... -822 56 0.011231 0.155466
15 POLYGON ((-74.20084 4.88937, -74.20084 4.98013... -827 54 0.014226 0.169692
10 POLYGON ((-74.29067 4.43572, -74.29067 4.52643... -828 49 0.014283 0.183975
32 POLYGON ((-73.84152 4.70788, -73.84152 4.79862... -823 52 0.014499 0.198473
8 POLYGON ((-77.43478 0.90441, -77.43478 0.99486... -863 10 0.014637 0.213110
7 POLYGON ((-77.43478 0.81396, -77.43478 0.90441... -863 9 0.015783 0.228893
43 POLYGON ((-73.75168 4.98013, -73.75168 5.07091... -822 55 0.016034 0.244927
24 POLYGON ((-74.02118 5.07091, -74.02118 5.1617,... -825 56 0.016361 0.261288
36 POLYGON ((-73.84152 5.07091, -73.84152 5.1617,... -823 56 0.017428 0.278716
51 POLYGON ((-73.57202 5.1617, -73.57202 5.2525, ... -820 57 0.018008 0.296724
29 POLYGON ((-73.93135 5.07091, -73.93135 5.1617,... -824 56 0.023284 0.320008
55 POLYGON ((-73.30253 5.2525, -73.30253 5.34332,... -817 58 0.024365 0.344373
2 POLYGON ((-77.61444 0.81396, -77.61444 0.90441... -865 9 0.026314 0.370686
0 POLYGON ((-77.70427 0.99486, -77.70427 1.08531... -866 11 0.026580 0.397266
23 POLYGON ((-74.02118 4.98013, -74.02118 5.07091... -825 55 0.026987 0.424253
38 POLYGON ((-73.84152 5.2525, -73.84152 5.34332,... -823 58 0.030071 0.454323
20 POLYGON ((-74.02118 4.34503, -74.02118 4.43572... -825 48 0.030949 0.485272
21 POLYGON ((-74.02118 4.79862, -74.02118 4.88937... -825 53 0.032679 0.517951
25 POLYGON ((-74.02118 5.1617, -74.02118 5.2525, ... -825 57 0.035198 0.553149
16 POLYGON ((-74.11101 4.70788, -74.11101 4.79862... -826 52 0.036026 0.589175
11 POLYGON ((-74.29067 4.70788, -74.29067 4.79862... -828 52 0.036830 0.626005
6 POLYGON ((-77.52461 0.99486, -77.52461 1.08531... -864 11 0.038173 0.664178
12 POLYGON ((-74.29067 4.79862, -74.29067 4.88937... -828 53 0.041434 0.705613
48 POLYGON ((-73.66185 5.70671, -73.66185 5.79759... -821 63 0.046215 0.751828
47 POLYGON ((-73.66185 5.61584, -73.66185 5.70671... -821 62 0.052229 0.804056
3 POLYGON ((-77.61444 0.99486, -77.61444 1.08531... -865 11 0.055049 0.859105
18 POLYGON ((-74.11101 4.88937, -74.11101 4.98013... -826 54 0.075013 0.934118
17 POLYGON ((-74.11101 4.79862, -74.11101 4.88937... -826 53 0.077521 1.011639
13 POLYGON ((-74.20084 4.70788, -74.20084 4.79862... -827 52 0.079973 1.091611
14 POLYGON ((-74.20084 4.79862, -74.20084 4.88937... -827 53 0.106018 1.197629

Calculate cumulative proportion

  1. Calculate cumulative proportion by dividing cumulative area by total area (cumulative proportion takes values between 0 and 1)
if has_data:
    gdf["cumulative_proportion"] = gdf["cumulative_area"] / total_area
    display(gdf)
geometry grid_col grid_row Agroecosistema_Papero cumulative_area cumulative_proportion
40 POLYGON ((-73.84152 5.61584, -73.84152 5.70671... -823 62 0.001124 0.001124 0.000938
5 POLYGON ((-77.52461 0.81396, -77.52461 0.90441... -864 9 0.001172 0.002296 0.001917
50 POLYGON ((-73.57202 5.07091, -73.57202 5.1617,... -820 56 0.002322 0.004618 0.003856
35 POLYGON ((-73.84152 4.98013, -73.84152 5.07091... -823 55 0.002376 0.006994 0.005840
34 POLYGON ((-73.84152 4.88937, -73.84152 4.98013... -823 54 0.002537 0.009531 0.007958
28 POLYGON ((-73.93135 4.70788, -73.93135 4.79862... -824 52 0.002568 0.012098 0.010102
49 POLYGON ((-73.57202 4.98013, -73.57202 5.07091... -820 55 0.002610 0.014708 0.012281
54 POLYGON ((-73.39236 5.43414, -73.39236 5.52498... -818 60 0.002852 0.017561 0.014663
27 POLYGON ((-73.93135 4.61715, -73.93135 4.70788... -824 51 0.002898 0.020458 0.017082
22 POLYGON ((-74.02118 4.88937, -74.02118 4.98013... -825 54 0.003224 0.023682 0.019774
31 POLYGON ((-73.93135 5.2525, -73.93135 5.34332,... -824 58 0.003431 0.027113 0.022639
52 POLYGON ((-73.57202 5.2525, -73.57202 5.34332,... -820 58 0.003649 0.030762 0.025686
26 POLYGON ((-73.93135 4.34503, -73.93135 4.43572... -824 48 0.005038 0.035800 0.029893
42 POLYGON ((-73.75168 4.88937, -73.75168 4.98013... -822 54 0.005060 0.040861 0.034118
41 POLYGON ((-73.75168 4.79862, -73.75168 4.88937... -822 53 0.005215 0.046075 0.038472
19 POLYGON ((-74.02118 4.25434, -74.02118 4.34503... -825 47 0.005741 0.051817 0.043266
53 POLYGON ((-73.39236 5.1617, -73.39236 5.2525, ... -818 57 0.007142 0.058959 0.049230
37 POLYGON ((-73.84152 5.1617, -73.84152 5.2525, ... -823 57 0.007356 0.066315 0.055372
39 POLYGON ((-73.84152 5.52498, -73.84152 5.61584... -823 61 0.007724 0.074040 0.061822
4 POLYGON ((-77.61444 1.08531, -77.61444 1.17576... -865 12 0.007856 0.081895 0.068381
46 POLYGON ((-73.66185 5.07091, -73.66185 5.1617,... -821 56 0.008674 0.090569 0.075624
30 POLYGON ((-73.93135 5.1617, -73.93135 5.2525, ... -824 57 0.009842 0.100411 0.083842
1 POLYGON ((-77.61444 0.72351, -77.61444 0.81396... -865 8 0.010646 0.111057 0.092731
45 POLYGON ((-73.66185 4.98013, -73.66185 5.07091... -821 55 0.010959 0.122016 0.101882
9 POLYGON ((-77.34495 1.08531, -77.34495 1.17576... -862 12 0.010996 0.133012 0.111063
33 POLYGON ((-73.84152 4.79862, -73.84152 4.88937... -823 53 0.011223 0.144235 0.120434
44 POLYGON ((-73.75168 5.07091, -73.75168 5.1617,... -822 56 0.011231 0.155466 0.129812
15 POLYGON ((-74.20084 4.88937, -74.20084 4.98013... -827 54 0.014226 0.169692 0.141690
10 POLYGON ((-74.29067 4.43572, -74.29067 4.52643... -828 49 0.014283 0.183975 0.153616
32 POLYGON ((-73.84152 4.70788, -73.84152 4.79862... -823 52 0.014499 0.198473 0.165722
8 POLYGON ((-77.43478 0.90441, -77.43478 0.99486... -863 10 0.014637 0.213110 0.177944
7 POLYGON ((-77.43478 0.81396, -77.43478 0.90441... -863 9 0.015783 0.228893 0.191122
43 POLYGON ((-73.75168 4.98013, -73.75168 5.07091... -822 55 0.016034 0.244927 0.204510
24 POLYGON ((-74.02118 5.07091, -74.02118 5.1617,... -825 56 0.016361 0.261288 0.218171
36 POLYGON ((-73.84152 5.07091, -73.84152 5.1617,... -823 56 0.017428 0.278716 0.232723
51 POLYGON ((-73.57202 5.1617, -73.57202 5.2525, ... -820 57 0.018008 0.296724 0.247760
29 POLYGON ((-73.93135 5.07091, -73.93135 5.1617,... -824 56 0.023284 0.320008 0.267201
55 POLYGON ((-73.30253 5.2525, -73.30253 5.34332,... -817 58 0.024365 0.344373 0.287545
2 POLYGON ((-77.61444 0.81396, -77.61444 0.90441... -865 9 0.026314 0.370686 0.309517
0 POLYGON ((-77.70427 0.99486, -77.70427 1.08531... -866 11 0.026580 0.397266 0.331710
23 POLYGON ((-74.02118 4.98013, -74.02118 5.07091... -825 55 0.026987 0.424253 0.354244
38 POLYGON ((-73.84152 5.2525, -73.84152 5.34332,... -823 58 0.030071 0.454323 0.379352
20 POLYGON ((-74.02118 4.34503, -74.02118 4.43572... -825 48 0.030949 0.485272 0.405194
21 POLYGON ((-74.02118 4.79862, -74.02118 4.88937... -825 53 0.032679 0.517951 0.432480
25 POLYGON ((-74.02118 5.1617, -74.02118 5.2525, ... -825 57 0.035198 0.553149 0.461870
16 POLYGON ((-74.11101 4.70788, -74.11101 4.79862... -826 52 0.036026 0.589175 0.491951
11 POLYGON ((-74.29067 4.70788, -74.29067 4.79862... -828 52 0.036830 0.626005 0.522704
6 POLYGON ((-77.52461 0.99486, -77.52461 1.08531... -864 11 0.038173 0.664178 0.554578
12 POLYGON ((-74.29067 4.79862, -74.29067 4.88937... -828 53 0.041434 0.705613 0.589175
48 POLYGON ((-73.66185 5.70671, -73.66185 5.79759... -821 63 0.046215 0.751828 0.627763
47 POLYGON ((-73.66185 5.61584, -73.66185 5.70671... -821 62 0.052229 0.804056 0.671373
3 POLYGON ((-77.61444 0.99486, -77.61444 1.08531... -865 11 0.055049 0.859105 0.717338
18 POLYGON ((-74.11101 4.88937, -74.11101 4.98013... -826 54 0.075013 0.934118 0.779972
17 POLYGON ((-74.11101 4.79862, -74.11101 4.88937... -826 53 0.077521 1.011639 0.844701
13 POLYGON ((-74.20084 4.70788, -74.20084 4.79862... -827 52 0.079973 1.091611 0.911477
14 POLYGON ((-74.20084 4.79862, -74.20084 4.88937... -827 53 0.106018 1.197629 1.000000

Count AOO cells

  1. Calculate AOO by counting the number of cells with a cumulative proportion greater than 0.01 (i.e. exclude cells that in combination account for up to 1% of the total mapped extent of the ecosystem type).
if has_data:
    aoo = len(gdf[gdf["cumulative_proportion"] > 0.01])
    print(f'AOO is {aoo} cells')
AOO is 51 cells

AOO Calculation (direct call)

if has_data:
    aoo_count = ecosystem.aoo
    print(f'AOO: {aoo_count} grid cells')
AOO: 51 grid cells

Criterion B Summary

Criterion B status (spatial)
Vulnerable (VU) — Agroecosistema Papero (Agroecosistema Papero), index 13

Status reflects the spatial thresholds for EOO (B1) and AOO (B2) only. A final listing under B1/B2 additionally requires at least one of: (a) an observed or inferred continuing decline; (b) threatening processes likely to cause continuing decline within 20 years; or (c) few threat-defined locations — none of which are derived from the spatial metrics.

Sub-criterion Metric Value Category
B1 EOO 42402 km² Vulnerable (VU)
B2 AOO 51 cells Least Concern (LC)
Overall B — — Vulnerable (VU)